{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "6502ff3a-e328-4de2-a790-5c4e8cf20060",
   "metadata": {},
   "source": [
    "Chapter 01\n",
    "\n",
    "# 直角坐标系画单位圆\n",
    "《线性代数》 | 鸢尾花书：数学不难"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b320aaee-6d40-49c3-b719-bc493d9291bf",
   "metadata": {},
   "source": [
    "这段代码从数学角度展示了**单位圆在二维平面中的参数化表达和几何结构**，结合了三角函数的性质和可视化技术。以下是其详细数学解释：\n",
    "\n",
    "---\n",
    "\n",
    "我们知道，单位圆是定义在二维欧几里得空间 $\\mathbb{R}^2$ 中、以原点为圆心、半径为 1 的圆，其集合形式为：\n",
    "\n",
    "$$\n",
    "\\mathcal{C} = \\left\\{ (x_1, x_2) \\in \\mathbb{R}^2 \\mid x_1^2 + x_2^2 = 1 \\right\\}\n",
    "$$\n",
    "\n",
    "为了绘制这个圆，代码使用了极坐标的参数化方式。令极角 $\\theta$ 在 $[0, 2\\pi]$ 区间上均匀采样，我们有如下参数表示：\n",
    "\n",
    "- $x_1 = \\cos(\\theta)$  \n",
    "- $x_2 = \\sin(\\theta)$\n",
    "\n",
    "于是，单位圆可以被参数化为：\n",
    "\n",
    "$$\n",
    "\\mathcal{C}(\\theta) = (\\cos(\\theta), \\sin(\\theta)), \\quad \\theta \\in [0, 2\\pi]\n",
    "$$\n",
    "\n",
    "代码中的 `np.linspace(0, 2 * np.pi, 300)` 生成了 300 个 $\\theta$ 值点，从而精细地近似绘制整个圆周。每个点 $(x_1, x_2)$ 对应着单位圆上的一个坐标，其在二维空间中满足：\n",
    "\n",
    "$$\n",
    "x_1^2 + x_2^2 = \\cos^2(\\theta) + \\sin^2(\\theta) = 1\n",
    "$$\n",
    "\n",
    "这是三角恒等式的直接应用，确保每个点都恰好落在单位圆上。\n",
    "\n",
    "---\n",
    "\n",
    "从可视化角度，代码通过 `matplotlib` 将这些点连接起来，形成一个连续的圆形轮廓。同时，为了强调对称性与几何关系，图中设置了等比例坐标轴（即 $x$ 与 $y$ 方向上的单位长度一致），并绘制了 $x_1$ 与 $x_2$ 坐标轴（即 $x=0$ 和 $y=0$ 的直线），形成十字参考系，使读者更清楚地观察圆与坐标轴的交点（例如 $(1,0)$、$(0,1)$、$(-1,0)$、$(0,-1)$）。\n",
    "\n",
    "此外，坐标轴范围设置为 $[-2, 2]$，提供了一个略大于单位圆的观察窗口，使圆的整体结构不至于贴边，增强了视觉清晰度。\n",
    "\n",
    "---\n",
    "\n",
    "总结来看，这段代码完整展示了：\n",
    "\n",
    "- 单位圆的**解析几何表示**；\n",
    "- 利用极角参数 $\\theta$ 的**函数化建模**；\n",
    "- 三角函数恒等式在**几何中的应用**；\n",
    "- 以及如何通过图形方式表达集合 $\\mathcal{C}$ 中的点。\n",
    "\n",
    "这是数学、几何与编程三者结合的一个典型范例。"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "4b84e936-bb1b-457c-8a89-7dcf82815fe0",
   "metadata": {},
   "source": [
    "## 初始化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "fa5c623c-9c1d-42d3-bfdd-0157c569a8f1",
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "b9555555-0036-4a7b-8040-84c40cc64049",
   "metadata": {},
   "source": [
    "## 生成数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "b26bde97-91c3-40e2-b3b8-50efe295c7c7",
   "metadata": {},
   "outputs": [],
   "source": [
    "theta_array = np.linspace(0, 2 * np.pi, 300)  # 0 到 2π 之间均匀取点\n",
    "x1_array = np.cos(theta_array)\n",
    "x2_array = np.sin(theta_array)"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "6eedcb43-9b23-47c2-b625-16c3e838fd14",
   "metadata": {},
   "source": [
    "## 可视化"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "id": "ea91c3db-ea06-4f20-85d6-b5c65689c948",
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Text(0, 0.5, 'x2')"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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Z6BxQz/d0EfJ+/30ycs027dv17Rp09SnTx+9/vrr5T739ttvKzs7W6tWrSoLKikpKUpKSlJcXJwcx9F1111X5SAimcs2U6dOrfTSTSChn4HDDX2U6GegcUM/3dBHyfv99NmREQAA4A4+O2cEAAC4A2EEAABYRRgBAABW+eQE1tq2efNm3XXXXTp69KhKSkp0880365Zbbqm0bVFRkZKSkpSZmamioiJdd911mjp1ah1XfPo2bNiguXPnqmXLlpUup3/CDz/8oPj4eHXo0KHsWKtWrbRo0aK6KLNGqtpHfz6XBw8e1G233aZt27apsLBQd955p2677bZK2/rbuazqeXEcR3/729+0YsUKlZSUqE+fPnr88cfL7Uvly6rTz5YtW5ZtFCqZ9R9WrVpVl+Wets2bN+vJJ5+Ux+PRggULKm3j7+dSqno//flc7tq1S+PHj1dubq4cx9Hvfvc73XfffRXaeeN8um5kpKioSCNGjNDs2bP18ccf6/3331d6errWrVtXafvU1FTFxMQoIyNDmZmZys7OVnp6eh1XfXoGDRqk2bNnq2PHjsrPzz9l2z179mjkyJH64IMPyh6++sPr56rTR38+l+PHj9eNN96o9evXa/369XrxxRf1ySefVNrW385lVc/L/PnzlZ+frw0bNmjTpk2KiIjQjBkzLFR8eqraz4MHD6pv377lzp+//PAaO3as7r33XnXp0kWHDh06aTt/P5dV7ac/n0tJGjFihO6++26tXbtWH330kTZv3qwXX3yxQjuvnE/HZVasWOFMmDCh3LH//ve/TmpqaqXtY2NjnePHj5c9z87OdgYPHlyrNXrLwYMHHcdxnNWrVzt33XXXKdu+9dZbTlpaWu0X5WXV6aO/nsujR486PXv2LHdsxYoVzu23315pe387l1U9LwMHDnT27t1b9tzj8Thdu3atkxq9oar9zMrKcm677ba6LM1rTnw9fv/9987QoUNP2s7fz2VV++nP5zI7O9u5+uqryx3bsGGDM2bMmAptvXE+XTcy0qVLlwoLqTmOU+kuvycWc/n5UFO7du20bdu22i7TKyIjI6vcNjc3Vy1atKi9YmpJVfvoz+dyy5Ytat++fbljsbGxysrKqrS9P53L6pyXAwcOKDo6uux5RESEiouLVVJSUhel1kh1+ulP5++Xqvr16M/nUqp6P/35XDZv3lyPPPJI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",
      "text/plain": [
       "<Figure size 600x600 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "fig, ax = plt.subplots(figsize=(6,6))\n",
    "\n",
    "# 绘制单位圆\n",
    "ax.plot(x1_array, x2_array, 'b', linewidth=1)  # 黑色圆，线宽 1\n",
    "\n",
    "# 设置 XY 轴比例相同\n",
    "ax.set_aspect('equal')\n",
    "ax.grid(True)\n",
    "\n",
    "# 设置坐标轴范围\n",
    "ax.set_xlim([-2, 2])\n",
    "ax.set_ylim([-2, 2])\n",
    "\n",
    "# 添加坐标轴\n",
    "ax.axhline(0, color='k', linewidth=0.5)\n",
    "ax.axvline(0, color='k', linewidth=0.5)\n",
    "\n",
    "# 增加轴标签\n",
    "ax.set_xlabel('x1')\n",
    "ax.set_ylabel('x2')"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "407fa326-a334-44b1-942a-ecf32524b687",
   "metadata": {},
   "source": [
    "作者\t**生姜DrGinger**  \n",
    "脚本\t**生姜DrGinger**  \n",
    "视频\t**崔崔CuiCui**  \n",
    "开源资源\t[**GitHub**](https://github.com/Visualize-ML)  \n",
    "平台\t[**油管**](https://www.youtube.com/@DrGinger_Jiang)\t\t\n",
    "\t\t[**iris小课堂**](https://space.bilibili.com/3546865719052873)\t\t\n",
    "\t\t[**生姜DrGinger**](https://space.bilibili.com/513194466)  "
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:base] *",
   "language": "python",
   "name": "conda-base-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.12.7"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
